小编在前面介绍过设计模式基本知识和设计模式基本准守原则,下面小编开始讲述在设计模式中创建型中最简单的一种模式:简单工厂模式。
简单工厂模式
简单工厂模式介绍
工厂模式是最常见的一类创建型设计模式。通常我们说工厂模式就是指工厂方法模式,此创建模式也是我们使用频率最高工厂模式。
小编在此篇文章将要讲解时简单工厂模式,是工厂模式简单版本,在编码开发过程中使用频率相对来说比较高。而且其还有另外一种高级版本工厂模式 – 抽象工厂模式。简单工厂中有三个角色:工厂(Factory)、抽象产品类(Product)和具体产品类(Concert Product)。
角色介绍
简单设计模式中有三种角色:工厂角色、抽象产品角色和具体产品角色。下面我们详细讲解三种角色使用。
- Factory(工厂角色):
工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product。
- Product(抽象产品角色):
它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。
- ConcreteProduct(具体产品角色):
它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。
实例应用
小编在这里以获取动物的实例为例使用简单工厂模式来进行讲解简单工厂使用方式。
实现方案流程图
实例中我们以 dog 和 duck 为例,所要实现内容是叫声、脚数目和吃的东西。所要实现的方案如下图:
实现代码
具体实现代码:
Animals
是抽象产品类:
1 | //Animals.h 文件 |
Dog
实现类:
1 | //Dog.h 文件 |
Ducks
实现类:
1 | //Duck.h 文件 |
SimpleFactory
工厂类:
1 | //SimpleFactory.h 文件 |
上面的实例 Demo 实现使用简单工厂模式来获取动物的对象,在获取对象过程中只需要参入相关的参数就可以获取对象实例。
优缺点
- 简单工厂模式优点
(1)工程类包含必须的判断逻辑,来实现什么时候创建产品对象实例。实现对象创建和使用分离,而且客户端无需直接创建产品对象,仅仅直接使用即可。
(2)减少记忆量,客户端不需要记住相关类名只需要基础传入对应相关参数就可以获取对象产品实例类。
- 简单工厂模式缺点
(1)工厂类负责集中创建所有的产品逻辑,这样一旦不能正常工作,整个代码都会受到影响。
(2)在添加多个对象过程中,肯定会增加类的数目。这样就增加整个项目复杂度和理解难度。
(3) 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
(4) 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。